package com.atguigu.juc.objecthead;

import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.vm.VM;

/**
 * @author yanglin
 * @create 2024-01-31 16:08 星期三
 * description:
 */
public class JOLDemo {

    public static void main(String[] args) {
        //Thread.currentThread()
//        System.out.println(VM.current().details());    //打印当前虚拟机的详细信息
        
        //所有的对象分配的字节都是8的整数倍
//        System.out.println(VM.current().objectAlignment());

        Object o = new Object();
//        System.out.println(ClassLayout.parseInstance(o).toPrintable());   //Instance size: 16 bytes

        /**
         * 情况1：只有对象头，没有其他任何实例数据
         */
//        Customer customer = new Customer();
//        System.out.println(ClassLayout.parseInstance(customer).toPrintable());   //Instance size: 16 bytes


        /**
         * 情况2：存在对象头和实例数据
         */
        Customer customer = new Customer();
        System.out.println(ClassLayout.parseInstance(customer).toPrintable());//满足对齐填充 Instance size: 24 bytes
        
    }
}


class Customer {  //只有一个对象头的实例对象，16字节（忽略压缩指针的影响） + 4字节 + 1字节 + 21字节 ---> 对齐填充为24字节
    //1、第一种情况只有对象头，没有其他任何实例数据
    
    
    //2、第二种情况 int + boolean
    int id;
    boolean flag = false;
}